package com.appleframework.core;

import java.util.ArrayList;
import java.util.List;

import org.springframework.jdbc.core.JdbcTemplate;

import com.sun.corba.se.impl.orbutil.closure.Constant;

public class Page<E> {
	// 一页能显示的最大记录数
	public static final Integer MAXSIZE = 100;

	// 分页最核心的属性：数据集合
	private List<E> result = new ArrayList<E>();
	// 每一页的记录数(默认值为最大记录数)
	private Integer pageSize = MAXSIZE;
	// 当前是第几页(默认为第1页)
	private Integer pageNo = 1;
	// 总记录数(-1表示没有得到这个数值)
	private Integer totalCount = -1;

	public Page() {
	}

	// 带参构造器，传递一个每页大小
	public Page(Integer pageSize) {
		if (pageSize > MAXSIZE) {
			this.pageSize = MAXSIZE;
		} else {
			this.pageSize = pageSize;
		}
	}

	/**
	 * 得到下一页的页码
	 */
	public Integer getNextPage() {
		// 得到总页码,当前页码如果等于总页码，下一个页码让它等于总页码
		int lastPage = getTotalPage();
		if (lastPage != -1 && pageNo == lastPage) {
			return pageNo;
		} else {
			return pageNo + 1;
		}
	}

	/**
	 * 得到上一页的页码
	 */
	public Integer getPrePage() {

		return (pageNo == 1) ? 1 : (pageNo - 1);

	}

	/**
	 * 得到总页码
	 */
	public Integer getTotalPage() {
		// 总记录数为-1表示，还没有得到这个值
		if (totalCount == -1) {
			return -1;
		}
		return (totalCount - 1) / pageSize + 1;
	}
	// public Page<E> geResult(Page<E> page)
	// {
	// String yoursql = "select * from XXX"
	// StringBuffer sqlQuery = new StringBuffer();
	// sqlQuery.append("select * from (select temp.*,rownum rownumber from (")
	// .append(yoursql)
	// .append("))");
	//
	// // objects 参数数组Object[]
	// //总记录数
	// int totalRows = jdbcTemplate.queryForInt(sqlCount.toString(), objects);
	// //开始索引位置
	// int startIndex = (currentPage - 1)*Constant.PAGESIZE;
	// //最后一条记录的索引位置
	// int lastIndex = 0;
	// //总页数
	// int totalPages = 0;
	// if (totalRows % PAGESIZE == 0) {
	// totalPages = totalRows / PAGESIZE;
	// } else {
	// totalPages = (totalRows / PAGESIZE) + 1;
	// }
	//          
	// if (totalRows < PAGESIZE){
	// lastIndex = totalRows;
	// } else if ((currentPage == totalPages && totalRows % PAGESIZE == 0) ||
	// currentPage < totalPages) {
	// lastIndex = currentPage*PAGESIZE;
	// } else if ((currentPage == totalPages && totalRows % PAGESIZE != 0)) {
	// lastIndex = totalRows;
	// }
	//
	// sqlQuery.append(") temp where ROWNUM <= ")
	// .append(lastIndex)
	// .append(" ) where rownumber > ")
	// .append(startIndex);
	//
	// List list = this.jdbcTemplate.queryForList(sqlQuery.toString(), objects);
	// return null;
	// }

	public List<E> getResult() {
		return result;
	}

	public void setResult(List<E> result) {
		this.result = result;
	}

	public Integer getPageSize() {
		return pageSize;
	}

	public void setPageSize(Integer pageSize) {
		this.pageSize = pageSize;
	}

	public Integer getPageNo() {
		return pageNo;
	}

	public void setPageNo(Integer pageNo) {
		this.pageNo = pageNo;
	}

	public Integer getTotalCount() {
		return totalCount;
	}

	public void setTotalCount(Integer totalCount) {
		this.totalCount = totalCount;
	}

	public static Integer getMaxsize() {
		return MAXSIZE;
	}

}
